/* 试编写在不带头结点的单链表L中删除最小值点的高效算法（己知最小值唯一）*/

#include <iostream>
#include "fun.h"
using namespace std;

// 删除最小值
void del_min(LNode *&L)
{
  // 指向最小值结点
  LNode *minp = L;
  LNode *p = L->next;
  
  // 遍历链表，找到最小值结点
  while (p != NULL)
  {
    if (p->data < minp->data)
      minp = p;
    p = p->next;
  }
  
  // 头节点最小
  if (L == minp)
  {
    L = L->next;
    free(minp);
    return;
  }
  
  // 找到最小值结点的前一个结点
  p = L;
  while (p->next != minp)
    p = p->next;
  
  // 删除结点
  p->next = minp->next;
  free(minp);
}

int main()
{
  // 创建无头节点的链表
  LNode *L = nohead_Linklist();
  
  // 删除最小值
  del_min(L);
  
  // 遍历链表，并打印
  LNode *q = L;
  while (q != NULL)
  {
    cout << q->data << " ";
    q = q->next;
  }
  return 0;
}